package appTool

import "github.com/sirupsen/logrus"

// AppConfig app应用配置
type AppConfig interface {
	TraceServerURL() string //tracerserver地址
	EtcdHosts() []string    //etcd地址
	RpcBasePath() string    //rpc基本地址
	PprofHttpPort() int     //pprof http端口
	LogLevel() logrus.Level //返回日志记录级别
	LogToFile() bool        //日志是否保存到文件
	RunMode() RunMode       //运行模式
	ServerMode() ServerMode //服务器模式
	BroadcastPath() string  //广播地址
	LoadFinishCallback()    //加载完成后回调
}

// AppConfigInit 应用配置初始化
type AppConfigInit interface {
	Init(reader ConfigReader)
}

type appCfg struct {
	cfg              AppConfig
	logFileName      string        `description:"日志输出文件名"`
	ignoreConfig     bool          `description:"忽略配置检测"`
	enableApolloCfg  bool          `description:"开启Apollo"`
	apolloURL        string        `description:"apollo地址"`
	apolloApp        string        `description:"apollo应用名称"`
	enableFileCfg    bool          `description:"开启文件配置加载"`
	configFilePath   string        `description:"配置文件地址"`
	configFileData   []byte        `description:"配置文件内容"`
	appName          string        `description:"应用名称"`
	appShort         string        `description:"应用简称"`
	appDescription   string        `description:"应用说明"`
	httpAddr         string        `description:"http地址"`
	httpPort         int           `description:"http端口"`
	rpcxServerAddr   string        `description:"rpcx服务地址"`
	enableRpcxServer bool          `description:"开启rpcx服务"`
	tracerServerURL  string        `description:"追踪服务地址"`
	rpcxClientEnable bool          `description:"载入rpcx客户端"`
	rpcxClients      []RpcxClient  `description:"rcpx客户端"`
	rpcxService      []RpcxService `description:"rpcx服务组"`
}
